import SqliteHelper from "@/sqlite/SqliteHelper";
import type { DatabaseParams } from "react-native-sqlite-storage";
import type { TableFieldsOption } from "@anlib/sqlite-orm/lib/types";

// 日志数据
const databaseParams: DatabaseParams = {
  name: "logger.db",
  location: "default"
};

// 本地保存的字段数据, 具体类型见下面定义
const fields: TableFieldsOption[] = [
  { field: "id", type: "INTEGER", isKey: true },
  { field: "time", type: "TEXT" },
  { field: "logType", type: "TEXT" },
  { field: "type", type: "TEXT" },
  { field: "filePath", type: "TEXT" },
  { field: "text", type: "TEXT" }
];

// 初始化 sqlite
let sqlh: SqliteHelper | null = null;
const initSqlite = (): Promise<SqliteHelper> => {
  return new Promise((resolve, reject) => {
    const instance = new SqliteHelper(databaseParams, fields, 1);

    // 初始化
    instance
      .init()
      .then(res => {
        if (res instanceof SqliteHelper) {
          sqlh = res;
          resolve(sqlh);
        } else {
          reject(res);
        }
      })
      .catch(err => {
        reject(err);
      });
  });
};

// 关闭数据库
const closeSqlite = () => {
  if (sqlh) {
    sqlh.close();
    sqlh = null;
  }
};

// 定义sqling 数据的 ts 类型
type LoggerSqliteType = {
  /** 数据库ID */
  id: number;

  /** 记录时间 */
  time: string;

  /**
   * 日志类型
   * - 1 普通日志
   * - 2 网络日志
   */
  logType: "1" | "2";

  /**
   * 日志类型
   * - INFO: 普通
   * - WARN: 警告
   * - ERROR: 错误
   */
  type: "INFO" | "WARN" | "ERROR";

  /** 保存的文件名称 */
  filePath: string;

  /** 日志内容 */
  text: string;
};

export { sqlh, initSqlite, closeSqlite, type LoggerSqliteType };
